<?php

namespace Agp\CoreBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
use APY\DataGridBundle\Grid\Mapping as GRID;
use Doctrine\Common\Collections\ArrayCollection;
use Agp\CoreBundle\Entity\ListaPreco;

/**
 * Agp\CoreBundle\Entity\EventoAmbiente
 *
 * @ORM\Table(name="evento_ambiente")
 * @ORM\Entity()
 * 
 * @GRID\Source(groupBy="codEventoAmbiente", columns="codEventoAmbiente, descricao, setores.codListaPreco:count")
 * @ORM\HasLifecycleCallbacks
 */
class EventoAmbiente
{
    /**
     * @var integer $codEventoAmbiente
     *
     * @ORM\Column(name="cod_evento_ambiente", type="integer", nullable=false)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     * 
     * @GRID\Column(title="Código", visible=false, type="text", size="5", primary=true)
     */
    protected $codEventoAmbiente;
    
    /**
     * @var string $nome
     *
     * @ORM\Column(name="descricao", type="string", length=42, nullable=false)
     * @Assert\NotBlank()
     * 
     * @GRID\Column(title="EventoAmbiente", type="text")
     */
    protected $descricao;
    
    /**
     * @var $evento
     *
     * @ORM\ManyToOne(targetEntity="Evento", fetch="LAZY")
     * @ORM\JoinColumn(name="cod_evento", referencedColumnName="cod_evento")
     */
    protected $evento;
    
    /**
     *
     * @ORM\OneToMany(targetEntity="ListaPreco", mappedBy="ambiente", cascade={"all"}, orphanRemoval=true)
     * 
     * @GRID\Column(field="setores.codListaPreco:count", align="center", type="text", title="Quantidade de setores")
     * 
     * @Assert\Count(
     *      min = "1",
     *      minMessage = "Voce deve adicionar pelo menos um setor"
     * )
     * 
     */
    protected $setores;
    
    /**
     * @var $produto
     *
     * @ORM\ManyToOne(targetEntity="Produto", fetch="LAZY")
     * @ORM\JoinColumn(name="cod_produto", referencedColumnName="cod_produto")
     */
    protected $produto;
    
    /**
     * @var $qtdeNivel
     *
     * @ORM\Column(name="qtde_nivel", type="integer", nullable=false)
     * 
     * @Assert\NotBlank()
     * @Assert\Min(limit = "2", message = "Deve possuir pelo menos dois níveis.")
     */
    protected $qtdeNivel;
    
    /* hack for Acls */
    public function getId(){
        return 'class';
    }
    
    public function __construct() {
        $this->setores = new ArrayCollection;
        $this->qtdeNivel = 2;
    }
   
    public function __toString() {
        return $this->descricao;
    }

    public function getCodEventoAmbiente() {
        return $this->codEventoAmbiente;
    }

    public function setCodEventoAmbiente($codEventoAmbiente) {
        $this->codEventoAmbiente = $codEventoAmbiente;
    }

    public function getEmpresa() {
        return $this->empresa;
    }

    public function setEmpresa($empresa) {
        $this->empresa = $empresa;
    }

    public function getDescricao() {
        return $this->descricao;
    }

    public function setDescricao($descricao) {
        $this->descricao = mb_strtoupper($descricao, 'UTF-8');
    }
    
    public function getFiliacao() {
        return $this->filiacao;
    }

    public function setFiliacao($filiacao) {
        $this->filiacao = $filiacao;
    }
    
    public function getSetores() {
        return $this->setores;
    }

    public function setSetores($setores) {
        $this->setores = $setores;
    }
    
    public function addSetor($setor) {
       
        $setor->setEventoAmbiente($this);
        $setor->setEmpresa($this->empresa);
        $setor->setTipo(ListaPreco::TP_SETOR);
        return $this->setores[] = $setor;
    }
    
    public function removeSetor($setor) {
        $this->setores->removeElement($setor);
    }
    
    public function getProduto() {
        return $this->produto;
    }

    public function getQtdeNivel() {
        return $this->qtdeNivel;
    }

    public function setProduto($produto) {
        $this->produto = $produto;
    }

    public function setQtdeNivel($qtdeNivel) {
        $this->qtdeNivel = $qtdeNivel;
    }

}